
import Router from './router.js';
import { useUserStore } from '../tools/storage.js';

// 白名单，不需要验证token的页面，注册和登录都是不需要验证token的
const whiteList = ['userRegister', 'userLogin'];
/*设置一个变量，当页面刷新，变量就会恢复0这个值，
这样当页面刷新的时候判断一下如果是0相当于刷新了页面
*/
let refresh = -1;
Router.beforeEach((to, from) => {
  /* refresh是不是有值，因为如果当前守卫走了一遍到最下方会++ ，
  每当跳转发生这个守卫必须在跳转前执行一次就是判断刷新后token能不能查到*/
  refresh++;
  // console.log(to.name, from.name);
  // 拿到状态管理的存储数据
  const userStore = useUserStore();

  if (!refresh) {
    /* 
    使用useUserStore中定义的init方法，这个方法相当于在登陆之后
     setLogin(token, userInfo) {
      this.token = token; 在状态管理里存储了token和userInfo
      this.userInfo = userInfo;
      VueLs.set('token', token); 在localStore里存储了token和userInfo
      VueLs.set('userInfo', userInfo);
    } */
    /* 这个方法拿到的是true或者false，相当于this.token是状态管理里存储的token，
    再从localStore里拿到的token给到useUserStore状态管理
    */
    const isAuthenticated = userStore.init();
    // console.log(isAuthenticated);
    /** 如果没有token，就跳转到登录页面，还要考虑检查白名单
     * whiteList.includes(to.name)：这行代码使用includes方法来检查whiteList数组中是否包含to.name这个值。 */
    if (!isAuthenticated && !whiteList.includes(to.name)) {
      return {
        // 跳转到登录页面
        path: '/user/login',
        // 跳转后，不能跳转回原来的页面，所以要使用replace
        replace: true
      }
    }
  }
  // 如果有token（没有登陆），就跳转到首页
  if (userStore.token && whiteList.includes(to.name)) {
    return {
      // 跳转到首页
      path: '/home/home',
      // 跳转后，不能跳转回原来的页面，所以要使用replace
      replace: true,
    }
  }
  // 没有登录
  if (!userStore.token && !whiteList.includes(to.name)) {
    return {
      // 跳转到登录页面
      path: '/user/login',
      // 跳转后，不能跳转回原来的页面，所以要使用replace
      replace: true,
    };
  }
  return true
})